2941번 크로아티아 알파벳
Day6 6단계 20231024
풀이 1
- 해결 날짜 : 2023.10.26
- 아이디어로 푼 문제가 아니다. 다음엔 내 아이디어로 풀어보자.
-
내 아이디어
- 각 시작 알파벳 다음으로 올 수 있는 문자가 어느 것이 있는지 체크해서 조건문으로 판별해보자
- d의 경우엔 z=가 오는지, -가 오는지 확인해야 한다.
-
다른 사람의 아이디어
- https://st-lab.tistory.com/68
String.charAt(i)를 써서 String을 배열화 하지 않고 각 인덱스 위치의 char를 읽어와서 조건별로 나누어 판단.- 비교 시 인덱스가 범위를 초과하지 않도록 판별 문자에 따라 (length() -1) 혹은 (length()-2) 위치까지만 순환 시켰다.
-
추가내용
- i번째 char 다음에 오는 문자를 비교할 조건 아이디어는 동일했지만, 이전에 내가 int i = 0 순환자인 i를 조건 성립 시 i++ 하는게 안되서 인덱스를 건너뛰는게 안되는 줄 알았지만 사실 가능했다.
- 인덱스를 건너 뛸 수 있다는 것과, dz=와 같은 케이스는 인덱스를 (length() -2)만 봐야한다는 점이 도움이 많이 되었다.
-
아래는 다른 사람의 아이디어에서 내 방식대로 더 수정한 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String cro = br.readLine();
char[][] croRefer = {{'z', '='}, {'s', '='}, {'n', 'j'}, {'l', 'j'}, {'d', '-'},
{'c', '='}, {'c', '-'}};
int twoCount = 0;
int ThreeCount = 0;
pass : for (int i = 0; i < cro.length()-1; i++) {
for (int j = 0; j < croRefer.length; j++) {
if(cro.charAt(i) == croRefer[j][0] && cro.charAt(i+1) == croRefer[j][1]) {
twoCount++;
i++;
continue pass;
} else if(i < cro.length()-2 && cro.charAt(i) == 'd'
&& cro.charAt(i+1) == 'z' && cro.charAt(i+2) == '=') {
ThreeCount++;
i += 2;
continue pass;
}
}
}
System.out.println(cro.length()-twoCount-2*ThreeCount);
br.close();
}
}
풀이 2
- 풀이 날짜 : 2025.05.22
- 약 1년 만에 부트 캠프에서 문제를 풀면서 다시 풀게 되었다.
- 전과 달리 이번엔 문제에서 주어진 크로아티아 알파벳 자체를 저장한 String 배열을 생성하였다.
- 풀이 1에서는 알파벳과 기호들의 조합을 따졌는데, 문제를 다시 읽어보니 문제에서 주어진 단어 자체가 입력값에 있는지 확인하는 것이 핵심이었다.
- 입력값에서 해당 알파벳들이 존재하는지
String.contains()메서드로 확인한 뒤, 해당 문자를*로 치환하였다. - 그 후 문자열의 길이를 읽어 입력으로 주어진 단어 내의 알파벳 개수를 확인하였다.
import java.io.*;
public class Main {
public static void main(String[] args) {
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(System.in));
String[] alphabet = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
String line = reader.readLine();
for (int i = 0; i < alphabet.length; i++) {
if (line.contains(alphabet[i])) {
line = line.replaceAll(alphabet[i], "*");
}
}
System.out.println(line.length());
} catch (Exception e) {
}
}
}